package basic

import "fmt"

func Array() {
	//定义：数组是同一种数据类型元素的集合（不可修改长度）
	// var 变量名 [元素数量]T
	var a [2]int
	fmt.Print(a)

	//初始化
	//1.直接设置值初始化
	var b = [2]int{1, 2}
	fmt.Print(b)
	//2.省略数组元素数量
	var c = [...]int{1, 2}
	fmt.Print(c)
	//3.索引初始化数组(没有意义)
	var d = [...]int{1: 2, 3: 5}
	fmt.Print(d)

	//遍历
	var e = [2]int{1, 2}
	for i := 0; i < len(e); i++ {
		fmt.Println(e[i])
	}
	for k, v := range e {
		fmt.Print(k, v)
	}

	//数组是值类型
	var f = [2]int{3, 4}
	var g = f
	g[1] = 5
	fmt.Print(f, g)

	//数组之和
	var k = []int{1, 3, 5, 7, 8}
	fmt.Print(sumAll(k))

	//两数之和
	var j = []int{1, 3, 5, 7, 8}
	fmt.Println(twoSum(j, 4))

	//注意：
	//数组支持 “==“、”!=” 操作符，因为内存总是被初始化过的。
	//[n]*T表示指针数组，*[n]T表示数组指针 。
}

func sumAll(arr []int) int {
	sum := 0
	for _, v := range arr {
		sum += v
	}
	return sum
}

func twoSum(arr []int, target int) [2]int {
	tmp := make(map[int]int, len(arr))
	for k, v := range arr {
		key, ok := tmp[target-v]
		if ok {
			return [2]int{k, key}
		}
		tmp[v] = k
	}
	return [2]int{}
}
